Articles トップへ  | 次へ »

IDA Pro入門 - 実行ファイルのロードとウィンドウの説明 -

2018.11.12

はじめに

 

IDA Pro入門の第1回目として、まずはじめに実行可能ファイルをIDA Proに読み込ませるところから、読み込んだあとに出てくる各ウィンドウの説明をしてみたいと思います。

実行環境については以下のとおりです。

 

OS : Windows 10 64bit

IDA Pro version : 7.2(現在の最新バージョン)

 

なお、IDA Proのインストールについては割愛させていただきます(唯一の注意点としては、インストール時にPython2.7がインストールされる点です。これは、今後皆さんがPythonでプラグインを作成する際に重要になります)

 

 

 

IDA Proの起動

 

さて、IDA Proのインストールはすでに終わっているものとして、実際に起動させてみましょう。

IDA Proをインストールした時点で、以下のような2つのアイコンが出現しているはずです。

 

 

IDA Proをインストールすると、64bitバージョンと32bitバージョンの両方がインストールされている状態になります。なので、解析対象が何ビットの実行可能ファイルなのかを確認した上で、それに適したIDA Proのプログラムを使用します。

(実行可能ファイルが何ビット環境で動作するのかを確認するツールについては、様々なツールがありますので、探してみてください)

 

 

IDA Proに実行ファイルを読み込ませる

 

では解析対象の実行可能ファイルをIDA Proに読み込ませていきたいと思います。IDA Pro起動後、ライセンスに関する情報が表示されたウィンドウでOKボタンをクリックすると、以下のような画面が表示されます。

 

 

新しく実行ファイルの解析を行う場合には「NEW」のボタンをクリックします。クリックすると、解析対象の実行可能ファイルを選択する画面になりますので、解析したいものを選択します。選択が終わると、以下のような画面になります。

 

 

選択した実行可能ファイルをどのようなファイルとして読み込むか、プロセッサの種類などの選択を行う画面になります。基本的にはデフォルトのままでも十分かと思います。

OKボタンをクリックすると、実行可能ファイルがIDA Proに読み込まれ、いろいろと自動解析が行われます。完了すると、以下のような画面が表示されます。

 

 

この画面についても少し説明しようと思います。この画面で表示されているのは、以下のようなものになります。

 

 

1.Toolbar area

2.Overview navigator(Navigation band)

3.Disassembly view

4.Graph Overview

5.Function window

6.Output window

 

 

 

1.Toolbar Area

 

ツールバーを表示している場所です。デフォルトでは表示されているアイコンが少ないですが、設定をすることによって増やすこともできますし、使用しないアイコンがあれば表示しない設定も可能です。以下のように、メニューバーの「View」から「Toolbars」をマウスオーバーすると、設定できるアイコンが表示されます。

 

 

 

 

2. Overview Navigation(Navigation Band)

 

Toolbar Areaの下にある帯状のデータが表示されている部分になります。

帯で表現されているのはメモリ上のアドレスになります。各データを色で分けており、「一目で、どこら辺のアドレスにどういったデータがあるのか」を確認する際には有用です。

ちなみに、どの色がどのデータを表しているかについては、帯の下の部分にかいてあります。

また、帯の横にはプルダウンがあり、Entry Pointの位置を特定したり、特定の文字列を検索するといったことが可能です

 

 

 

3. Disassembly window

 

メインで使っていく画面の1つになります。ロードした実行ファイルの中身を逆アセンブルした結果をここで表示します。「ウィンドウの説明」の部分で説明いたします。

 

 

 

4. Graph Overview

 

Disassembly Viewで表示されているアセンブリ命令やそのブロックを大まかにグラフィカルに表示したものになります。後で説明しますが、Disassembly windowGraph viewモードのコードブロックとフローのみを表示した「大雑把な」グラフといった感じです。

 

 

 

5. Functions window

 

実行可能ファイルに含まれている関数の一覧を表示します。これについても詳しくは「ウィンドウとビューの説明」のところで説明します。

 

 

 

6. Output window

 

IDA Proのログを表示したり、Pythonのコードを実行したりした時の出力を表示します。

 

 

 

それでは次に、各ウィンドウとビューの説明に移りたいと思います。

 

 

 

ウィンドウとビューの説明

 

IDA Proには様々なウィンドウやビューというものが存在します。なので、いくつかピックアップして「どういったウィンドウ・ビューがあるのか」を説明したいと思います。

 

 

Disassembly window

 

 

解析の際のメイン画面とも言うべき画面です。主にこの画面で各命令を見ながら、他のウィンドウやビューで細かい内容などを見ていき、実行可能ファイルの解析をおこなっていくという形になると思います。

また、Disassembly windowには表示方法に2種類あります。「Text View」と「Graph View」があり、解析をおこなっていく中で表示を切り替えながら進めていくことができます。

 

まずはText Viewから。

 

 

いわゆる「いつもデバッガで見るような画面」といったところでしょうか。アセンブリ命令がアドレスの低位から順番に並べられて表示されていることがわかるかと思います。また、ジャンプ命令の移動先については、左側に矢印で書かれています。

 

Text Viewでも特に解析には問題ありませんが、条件分岐などが多く存在する場合、Text Viewだとコードを追うのがしんどいときがあります。そういったときにはGraph Viewを使っていくといいかもしれません。

 

Graph Viewは以下のような画面になります。

 

Text Viewよりグラフィカルになっています。Graph Viewでは、コードをある程度のまとまりとしてブロックごとに表示しており、条件分岐などで別のアドレスにジャンプする際には「どのブロックにジャンプするか」を矢印でわかりやすく表示してくれています。「大まかにプログラム内の処理を把握したい」場合には、非常にわかりやすい画面かと思います。

大量の条件分岐と繰り返し文が含まれている実行可能ファイルを、Text Viewだけで解析しようと思うとそれはそれで大変だと思います。なので、「Graph Viewでまず大まかな処理の流れを把握」して「細かい処理についてはText Viewでみる」という使い方もありだと思います。

 

また、Text ViewGraph Viewの切り替えは、Spaceキーを使うことで簡単にできます(ショートカットキーというものです)。通常であれば、例えばText Viewでみている場合には、右クリックのメニューから「Graph view」をクリックすると切り替えが可能です(逆に、Graph Viewでみている場合には、右クリックのメニューから「Text view」をクリックすると切り替えることができます)

 

 

 

Function window

 

 

Functions windowでは、IDAが実行ファイルを読み込んだ際に解析を行い、関数として識別されたものを列挙しています。ここで表示されるのは、関数名、関数が配置されているセグメント、関数の開始アドレス、関数の長さ、ローカル変数の合計サイズ、関数に渡される引数の合計サイズ、属性値などになります。

特に属性値は、ぱっと見で何を表しているのかよくわからないと思いますので、Hex-raysのサイトを確認していただければと思います。

 

Hex-rays  The Interactive Disassembler Help Index

https://www.hex-rays.com/products/ida/support/idadoc/586.shtml

 

 

 

Exports window

 

 

Export windowでは、実行可能ファイル内のエクスポートされるデータおよび関数を表示します。今回、読み込んでいる実行可能ファイルでは1個しかありませんが、例えばDLLなどの他の実行可能ファイル(.exeなど)から呼び出される関数が定義されているファイルの場合、IDA Proに読み込ませるとExport windowに多くの関数名がリストされるかと思います。

 

 

 

Imports window

 

 

Import windowでは、実行可能ファイル内にインポートされた関数を表示します。ここでは、インポートされた関数の名前とどのライブラリからインポートされたかなどを確認することができます(注意として、ここで表示されるインポート関数は「実行可能ファイルを読み込んだ際に、インポート関数のリストを解析して得られたもの」になります。よくマルウェアの挙動としてある「動的にライブラリをロードして、特定の関数を使用する」といった場合、その関数については表示されませんのでご注意ください)

 

 

 

Structures window

 

 

IDAが自動解析時に検知した、実行可能ファイル内に定義されている構造体を表示します。特定の構造体名を選択した後、Ctrl + "+”をすると、その構造体の構成(構造体メンバとそのサイズ)を展開して確認することができます。また、展開した構造体を閉じる際には、Ctrl + “-”をします。すると展開する前の状態に戻すことができます。

 

 

 

Strings window

 

 

実行可能ファイル内に含まれる文字列をリストとして表示します。表示される情報として、 文字列が記録されている開始アドレス(Address)、文字列の長さ(Length)、文字列の検出方式(Type)、記録されている文字列(String)になります。Typeの部分に関しては、デフォルトの設定であれば"C"と記載されているものだけがあるかと思います。これはC-style(C言語で使われるような、nullバイトで終端する文字列)を表しています。

もし、他の種類の文字列についても表示したい場合には、String window内で右クリックしたあと「Setup..」を選択すると以下のような画面が出てきますので、ここで変更ができます。

 

 

 

 

Function Call window

 

 

Function Call windowでは、Disassemblyウィンドウで現在選択している処理の呼び出し元(Caller)と、この処理が呼び出す関数(Callee)の一覧を表示します。画面が上下で分かれていますが、上が呼び出し元に関する情報で、現在選択している処理を呼び出した関数の名前、呼び出し時の命令、命令のアドレスが表示されています。下が現在選択している処理が呼び出す関数の一覧で、関数呼び出しの際の命令と、各命令のアドレスが表示されています

 

 

 

Segmentations

 

 

プログラム内の各セクションがメモリのどこにロードされているかなどの情報が確認できます。

 

 

 

 

ここまでで、様々なウィンドウの説明をしていきましたが、紹介したウィンドウやビュー以外にもいくつか種類があります。以下のようにメニューバーの「View」から「Open subview」をマウスオーバーするとIDAに備わっているビューを確認できます。

 

 

このように、いろいろ画面などを出してみて、自分が使いやすいように画面をカスタマイズしてみてください。

今回は、実行可能ファイルを読み込んで、そのあとに出てくるウィンドウやビューについて説明していきました。

 

次回は、コード解析に関する話や実際にデバッグをする際の操作などについて説明していきたいと思います。また、知っておくと便利なショートカットキーについても少しまとめておこうかと思います。